#include <54func.h>
int main(int argc,char *argv[])
{
    // ./3_mycp.c src desc
    ARGS_CHECK(argc,3);
    int fdr = open(argv[1],O_RDONLY);
    ERROR_CHECK(fdr,-1,"open read");

    int fdw = open(argv[2],O_WRONLY);
    ERROR_CHECK(fdw,-1,"open write");

    //进行系统调用需要再内核态下才能进行，但是由用户态转换为内核态是需要消费时间的，这也叫做陷入！
    //因此缓冲越大，再复制文件的过程中，需要转换的次数越少，陷入的时间就比较少!
    char buf[1024*1024] = {0};//使用char数组的原因是方便控制内存大小！
    //总所周知，栈的小小有限，可能只有8M，但是想要复制的文件会很大，因此使用循环来实现复制
    while(1)
    {
        //养成好习惯，再读取文件的时候，一定要先清零
        memset(buf,0,sizeof(buf));
        ssize_t sret = read(fdr,buf,sizeof(buf));
        //若是想要复制的文件大小为0（即读取结束！）退出循环！
        if(sret == 0)
        {
            break;
        }
        write(fdw,buf,sret);//有多少，就写多少！

    }

    close(fdr);
    close(fdw);
    return 0;
}
